home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / util / Calendar.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  13.8 KB  |  930 lines

  1. package java.util;
  2.  
  3. import java.io.IOException;
  4. import java.io.ObjectInputStream;
  5. import java.io.ObjectOutputStream;
  6. import java.io.Serializable;
  7. import java.security.AccessController;
  8. import java.text.DateFormat;
  9. import java.text.DateFormatSymbols;
  10. import sun.util.BuddhistCalendar;
  11. import sun.util.calendar.ZoneInfo;
  12. import sun.util.resources.LocaleData;
  13.  
  14. public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar> {
  15.    public static final int ERA = 0;
  16.    public static final int YEAR = 1;
  17.    public static final int MONTH = 2;
  18.    public static final int WEEK_OF_YEAR = 3;
  19.    public static final int WEEK_OF_MONTH = 4;
  20.    public static final int DATE = 5;
  21.    public static final int DAY_OF_MONTH = 5;
  22.    public static final int DAY_OF_YEAR = 6;
  23.    public static final int DAY_OF_WEEK = 7;
  24.    public static final int DAY_OF_WEEK_IN_MONTH = 8;
  25.    public static final int AM_PM = 9;
  26.    public static final int HOUR = 10;
  27.    public static final int HOUR_OF_DAY = 11;
  28.    public static final int MINUTE = 12;
  29.    public static final int SECOND = 13;
  30.    public static final int MILLISECOND = 14;
  31.    public static final int ZONE_OFFSET = 15;
  32.    public static final int DST_OFFSET = 16;
  33.    public static final int FIELD_COUNT = 17;
  34.    public static final int SUNDAY = 1;
  35.    public static final int MONDAY = 2;
  36.    public static final int TUESDAY = 3;
  37.    public static final int WEDNESDAY = 4;
  38.    public static final int THURSDAY = 5;
  39.    public static final int FRIDAY = 6;
  40.    public static final int SATURDAY = 7;
  41.    public static final int JANUARY = 0;
  42.    public static final int FEBRUARY = 1;
  43.    public static final int MARCH = 2;
  44.    public static final int APRIL = 3;
  45.    public static final int MAY = 4;
  46.    public static final int JUNE = 5;
  47.    public static final int JULY = 6;
  48.    public static final int AUGUST = 7;
  49.    public static final int SEPTEMBER = 8;
  50.    public static final int OCTOBER = 9;
  51.    public static final int NOVEMBER = 10;
  52.    public static final int DECEMBER = 11;
  53.    public static final int UNDECIMBER = 12;
  54.    // $FF: renamed from: AM int
  55.    public static final int field_0 = 0;
  56.    // $FF: renamed from: PM int
  57.    public static final int field_1 = 1;
  58.    public static final int ALL_STYLES = 0;
  59.    public static final int SHORT = 1;
  60.    public static final int LONG = 2;
  61.    protected int[] fields;
  62.    protected boolean[] isSet;
  63.    private transient int[] stamp;
  64.    protected long time;
  65.    protected boolean isTimeSet;
  66.    protected boolean areFieldsSet;
  67.    transient boolean areAllFieldsSet;
  68.    private boolean lenient;
  69.    private TimeZone zone;
  70.    private transient boolean sharedZone;
  71.    private int firstDayOfWeek;
  72.    private int minimalDaysInFirstWeek;
  73.    private static Hashtable<Locale, int[]> cachedLocaleData = new Hashtable(3);
  74.    private static final int UNSET = 0;
  75.    private static final int COMPUTED = 1;
  76.    private static final int MINIMUM_USER_STAMP = 2;
  77.    static final int ALL_FIELDS = 131071;
  78.    private int nextStamp;
  79.    static final int currentSerialVersion = 1;
  80.    private int serialVersionOnStream;
  81.    static final long serialVersionUID = -1807547505821590642L;
  82.    static final int ERA_MASK = 1;
  83.    static final int YEAR_MASK = 2;
  84.    static final int MONTH_MASK = 4;
  85.    static final int WEEK_OF_YEAR_MASK = 8;
  86.    static final int WEEK_OF_MONTH_MASK = 16;
  87.    static final int DAY_OF_MONTH_MASK = 32;
  88.    static final int DATE_MASK = 32;
  89.    static final int DAY_OF_YEAR_MASK = 64;
  90.    static final int DAY_OF_WEEK_MASK = 128;
  91.    static final int DAY_OF_WEEK_IN_MONTH_MASK = 256;
  92.    static final int AM_PM_MASK = 512;
  93.    static final int HOUR_MASK = 1024;
  94.    static final int HOUR_OF_DAY_MASK = 2048;
  95.    static final int MINUTE_MASK = 4096;
  96.    static final int SECOND_MASK = 8192;
  97.    static final int MILLISECOND_MASK = 16384;
  98.    static final int ZONE_OFFSET_MASK = 32768;
  99.    static final int DST_OFFSET_MASK = 65536;
  100.    private static final String[] FIELD_NAME = new String[]{"ERA", "YEAR", "MONTH", "WEEK_OF_YEAR", "WEEK_OF_MONTH", "DAY_OF_MONTH", "DAY_OF_YEAR", "DAY_OF_WEEK", "DAY_OF_WEEK_IN_MONTH", "AM_PM", "HOUR", "HOUR_OF_DAY", "MINUTE", "SECOND", "MILLISECOND", "ZONE_OFFSET", "DST_OFFSET"};
  101.  
  102.    protected Calendar() {
  103.       this(TimeZone.getDefaultRef(), Locale.getDefault());
  104.       this.sharedZone = true;
  105.    }
  106.  
  107.    protected Calendar(TimeZone var1, Locale var2) {
  108.       this.lenient = true;
  109.       this.sharedZone = false;
  110.       this.nextStamp = 2;
  111.       this.serialVersionOnStream = 1;
  112.       this.fields = new int[17];
  113.       this.isSet = new boolean[17];
  114.       this.stamp = new int[17];
  115.       this.zone = var1;
  116.       this.setWeekCountData(var2);
  117.    }
  118.  
  119.    public static Calendar getInstance() {
  120.       Calendar var0 = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault());
  121.       var0.sharedZone = true;
  122.       return var0;
  123.    }
  124.  
  125.    public static Calendar getInstance(TimeZone var0) {
  126.       return createCalendar(var0, Locale.getDefault());
  127.    }
  128.  
  129.    public static Calendar getInstance(Locale var0) {
  130.       Calendar var1 = createCalendar(TimeZone.getDefaultRef(), var0);
  131.       var1.sharedZone = true;
  132.       return var1;
  133.    }
  134.  
  135.    public static Calendar getInstance(TimeZone var0, Locale var1) {
  136.       return createCalendar(var0, var1);
  137.    }
  138.  
  139.    private static Calendar createCalendar(TimeZone var0, Locale var1) {
  140.       if ("th".equals(var1.getLanguage()) && "TH".equals(var1.getCountry())) {
  141.          return new BuddhistCalendar(var0, var1);
  142.       } else {
  143.          return (Calendar)("JP".equals(var1.getVariant()) && "JP".equals(var1.getCountry()) && "ja".equals(var1.getLanguage()) ? new JapaneseImperialCalendar(var0, var1) : new GregorianCalendar(var0, var1));
  144.       }
  145.    }
  146.  
  147.    public static synchronized Locale[] getAvailableLocales() {
  148.       return DateFormat.getAvailableLocales();
  149.    }
  150.  
  151.    protected abstract void computeTime();
  152.  
  153.    protected abstract void computeFields();
  154.  
  155.    public final Date getTime() {
  156.       return new Date(this.getTimeInMillis());
  157.    }
  158.  
  159.    public final void setTime(Date var1) {
  160.       this.setTimeInMillis(var1.getTime());
  161.    }
  162.  
  163.    public long getTimeInMillis() {
  164.       if (!this.isTimeSet) {
  165.          this.updateTime();
  166.       }
  167.  
  168.       return this.time;
  169.    }
  170.  
  171.    public void setTimeInMillis(long var1) {
  172.       if (this.time != var1 || !this.isTimeSet || !this.areFieldsSet || !this.areAllFieldsSet || !(this.zone instanceof ZoneInfo) || ((ZoneInfo)this.zone).isDirty()) {
  173.          this.time = var1;
  174.          this.isTimeSet = true;
  175.          this.areFieldsSet = false;
  176.          this.computeFields();
  177.          this.areAllFieldsSet = this.areFieldsSet = true;
  178.       }
  179.    }
  180.  
  181.    public int get(int var1) {
  182.       this.complete();
  183.       return this.internalGet(var1);
  184.    }
  185.  
  186.    protected final int internalGet(int var1) {
  187.       return this.fields[var1];
  188.    }
  189.  
  190.    final void internalSet(int var1, int var2) {
  191.       this.fields[var1] = var2;
  192.    }
  193.  
  194.    public void set(int var1, int var2) {
  195.       if (this.isLenient() && this.areFieldsSet && !this.areAllFieldsSet) {
  196.          this.computeFields();
  197.       }
  198.  
  199.       this.internalSet(var1, var2);
  200.       this.isTimeSet = false;
  201.       this.areFieldsSet = false;
  202.       this.isSet[var1] = true;
  203.       this.stamp[var1] = this.nextStamp++;
  204.       if (this.nextStamp == Integer.MAX_VALUE) {
  205.          this.adjustStamp();
  206.       }
  207.  
  208.    }
  209.  
  210.    public final void set(int var1, int var2, int var3) {
  211.       this.set(1, var1);
  212.       this.set(2, var2);
  213.       this.set(5, var3);
  214.    }
  215.  
  216.    public final void set(int var1, int var2, int var3, int var4, int var5) {
  217.       this.set(1, var1);
  218.       this.set(2, var2);
  219.       this.set(5, var3);
  220.       this.set(11, var4);
  221.       this.set(12, var5);
  222.    }
  223.  
  224.    public final void set(int var1, int var2, int var3, int var4, int var5, int var6) {
  225.       this.set(1, var1);
  226.       this.set(2, var2);
  227.       this.set(5, var3);
  228.       this.set(11, var4);
  229.       this.set(12, var5);
  230.       this.set(13, var6);
  231.    }
  232.  
  233.    public final void clear() {
  234.       for(int var1 = 0; var1 < this.fields.length; this.isSet[var1++] = false) {
  235.          this.stamp[var1] = this.fields[var1] = 0;
  236.       }
  237.  
  238.       this.areAllFieldsSet = this.areFieldsSet = false;
  239.       this.isTimeSet = false;
  240.    }
  241.  
  242.    public final void clear(int var1) {
  243.       this.fields[var1] = 0;
  244.       this.stamp[var1] = 0;
  245.       this.isSet[var1] = false;
  246.       this.areAllFieldsSet = this.areFieldsSet = false;
  247.       this.isTimeSet = false;
  248.    }
  249.  
  250.    public final boolean isSet(int var1) {
  251.       return this.stamp[var1] != 0;
  252.    }
  253.  
  254.    public String getDisplayName(int var1, int var2, Locale var3) {
  255.       if (!this.checkDisplayNameParams(var1, var2, 0, 2, var3, 645)) {
  256.          return null;
  257.       } else {
  258.          DateFormatSymbols var4 = DateFormatSymbols.getInstance(var3);
  259.          String[] var5 = this.getFieldStrings(var1, var2, var4);
  260.          if (var5 != null) {
  261.             int var6 = this.get(var1);
  262.             if (var6 < var5.length) {
  263.                return var5[var6];
  264.             }
  265.          }
  266.  
  267.          return null;
  268.       }
  269.    }
  270.  
  271.    public Map<String, Integer> getDisplayNames(int var1, int var2, Locale var3) {
  272.       if (!this.checkDisplayNameParams(var1, var2, 0, 2, var3, 645)) {
  273.          return null;
  274.       } else if (var2 == 0) {
  275.          Map var4 = this.getDisplayNamesImpl(var1, 1, var3);
  276.          if (var1 != 0 && var1 != 9) {
  277.             Map var5 = this.getDisplayNamesImpl(var1, 2, var3);
  278.             if (var4 == null) {
  279.                return var5;
  280.             } else {
  281.                if (var5 != null) {
  282.                   var4.putAll(var5);
  283.                }
  284.  
  285.                return var4;
  286.             }
  287.          } else {
  288.             return var4;
  289.          }
  290.       } else {
  291.          return this.getDisplayNamesImpl(var1, var2, var3);
  292.       }
  293.    }
  294.  
  295.    private Map<String, Integer> getDisplayNamesImpl(int var1, int var2, Locale var3) {
  296.       DateFormatSymbols var4 = DateFormatSymbols.getInstance(var3);
  297.       String[] var5 = this.getFieldStrings(var1, var2, var4);
  298.       if (var5 != null) {
  299.          HashMap var6 = new HashMap();
  300.  
  301.          for(int var7 = 0; var7 < var5.length; ++var7) {
  302.             if (var5[var7].length() != 0) {
  303.                var6.put(var5[var7], var7);
  304.             }
  305.          }
  306.  
  307.          return var6;
  308.       } else {
  309.          return null;
  310.       }
  311.    }
  312.  
  313.    boolean checkDisplayNameParams(int var1, int var2, int var3, int var4, Locale var5, int var6) {
  314.       if (var1 >= 0 && var1 < this.fields.length && var2 >= var3 && var2 <= var4) {
  315.          if (var5 == null) {
  316.             throw new NullPointerException();
  317.          } else {
  318.             return isFieldSet(var6, var1);
  319.          }
  320.       } else {
  321.          throw new IllegalArgumentException();
  322.       }
  323.    }
  324.  
  325.    private String[] getFieldStrings(int var1, int var2, DateFormatSymbols var3) {
  326.       String[] var4 = null;
  327.       switch (var1) {
  328.          case 0:
  329.             var4 = var3.getEras();
  330.          case 1:
  331.          case 3:
  332.          case 4:
  333.          case 5:
  334.          case 6:
  335.          case 8:
  336.          default:
  337.             break;
  338.          case 2:
  339.             var4 = var2 == 2 ? var3.getMonths() : var3.getShortMonths();
  340.             break;
  341.          case 7:
  342.             var4 = var2 == 2 ? var3.getWeekdays() : var3.getShortWeekdays();
  343.             break;
  344.          case 9:
  345.             var4 = var3.getAmPmStrings();
  346.       }
  347.  
  348.       return var4;
  349.    }
  350.  
  351.    protected void complete() {
  352.       if (!this.isTimeSet) {
  353.          this.updateTime();
  354.       }
  355.  
  356.       if (!this.areFieldsSet || !this.areAllFieldsSet) {
  357.          this.computeFields();
  358.          this.areAllFieldsSet = this.areFieldsSet = true;
  359.       }
  360.  
  361.    }
  362.  
  363.    final boolean isExternallySet(int var1) {
  364.       return this.stamp[var1] >= 2;
  365.    }
  366.  
  367.    final int getSetStateFields() {
  368.       int var1 = 0;
  369.  
  370.       for(int var2 = 0; var2 < this.fields.length; ++var2) {
  371.          if (this.stamp[var2] != 0) {
  372.             var1 |= 1 << var2;
  373.          }
  374.       }
  375.  
  376.       return var1;
  377.    }
  378.  
  379.    final void setFieldsComputed(int var1) {
  380.       if (var1 == 131071) {
  381.          for(int var2 = 0; var2 < this.fields.length; ++var2) {
  382.             this.stamp[var2] = 1;
  383.             this.isSet[var2] = true;
  384.          }
  385.  
  386.          this.areFieldsSet = this.areAllFieldsSet = true;
  387.       } else {
  388.          for(int var3 = 0; var3 < this.fields.length; ++var3) {
  389.             if ((var1 & 1) == 1) {
  390.                this.stamp[var3] = 1;
  391.                this.isSet[var3] = true;
  392.             } else if (this.areAllFieldsSet && !this.isSet[var3]) {
  393.                this.areAllFieldsSet = false;
  394.             }
  395.  
  396.             var1 >>>= 1;
  397.          }
  398.       }
  399.  
  400.    }
  401.  
  402.    final void setFieldsNormalized(int var1) {
  403.       if (var1 != 131071) {
  404.          for(int var2 = 0; var2 < this.fields.length; ++var2) {
  405.             if ((var1 & 1) == 0) {
  406.                this.stamp[var2] = this.fields[var2] = 0;
  407.                this.isSet[var2] = false;
  408.             }
  409.  
  410.             var1 >>= 1;
  411.          }
  412.       }
  413.  
  414.       this.areFieldsSet = true;
  415.       this.areAllFieldsSet = false;
  416.    }
  417.  
  418.    final boolean isPartiallyNormalized() {
  419.       return this.areFieldsSet && !this.areAllFieldsSet;
  420.    }
  421.  
  422.    final boolean isFullyNormalized() {
  423.       return this.areFieldsSet && this.areAllFieldsSet;
  424.    }
  425.  
  426.    final void setUnnormalized() {
  427.       this.areFieldsSet = this.areAllFieldsSet = false;
  428.    }
  429.  
  430.    static final boolean isFieldSet(int var0, int var1) {
  431.       return (var0 & 1 << var1) != 0;
  432.    }
  433.  
  434.    final int selectFields() {
  435.       int var1 = 2;
  436.       if (this.stamp[0] != 0) {
  437.          var1 |= 1;
  438.       }
  439.  
  440.       int var2 = this.stamp[7];
  441.       int var3 = this.stamp[2];
  442.       int var4 = this.stamp[5];
  443.       int var5 = aggregateStamp(this.stamp[4], var2);
  444.       int var6 = aggregateStamp(this.stamp[8], var2);
  445.       int var7 = this.stamp[6];
  446.       int var8 = aggregateStamp(this.stamp[3], var2);
  447.       int var9 = var4;
  448.       if (var5 > var4) {
  449.          var9 = var5;
  450.       }
  451.  
  452.       if (var6 > var9) {
  453.          var9 = var6;
  454.       }
  455.  
  456.       if (var7 > var9) {
  457.          var9 = var7;
  458.       }
  459.  
  460.       if (var8 > var9) {
  461.          var9 = var8;
  462.       }
  463.  
  464.       if (var9 == 0) {
  465.          var5 = this.stamp[4];
  466.          var6 = Math.max(this.stamp[8], var2);
  467.          var8 = this.stamp[3];
  468.          var9 = Math.max(Math.max(var5, var6), var8);
  469.          if (var9 == 0) {
  470.             var4 = var3;
  471.             var9 = var3;
  472.          }
  473.       }
  474.  
  475.       if (var9 == var4 || var9 == var5 && this.stamp[4] >= this.stamp[3] || var9 == var6 && this.stamp[8] >= this.stamp[3]) {
  476.          var1 |= 4;
  477.          if (var9 == var4) {
  478.             var1 |= 32;
  479.          } else {
  480.             assert var9 == var5 || var9 == var6;
  481.  
  482.             if (var2 != 0) {
  483.                var1 |= 128;
  484.             }
  485.  
  486.             if (var9 == var5) {
  487.                var1 |= 16;
  488.             } else {
  489.                assert var9 == var6;
  490.  
  491.                if (this.stamp[8] != 0) {
  492.                   var1 |= 256;
  493.                }
  494.             }
  495.          }
  496.       } else {
  497.          assert var9 == var7 || var9 == var8 || var9 == 0;
  498.  
  499.          if (var9 == var7) {
  500.             var1 |= 64;
  501.          } else {
  502.             assert var9 == var8;
  503.  
  504.             if (var2 != 0) {
  505.                var1 |= 128;
  506.             }
  507.  
  508.             var1 |= 8;
  509.          }
  510.       }
  511.  
  512.       int var10 = this.stamp[11];
  513.       int var11 = aggregateStamp(this.stamp[10], this.stamp[9]);
  514.       var9 = var11 > var10 ? var11 : var10;
  515.       if (var9 == 0) {
  516.          var9 = Math.max(this.stamp[10], this.stamp[9]);
  517.       }
  518.  
  519.       if (var9 != 0) {
  520.          if (var9 == var10) {
  521.             var1 |= 2048;
  522.          } else {
  523.             var1 |= 1024;
  524.             if (this.stamp[9] != 0) {
  525.                var1 |= 512;
  526.             }
  527.          }
  528.       }
  529.  
  530.       if (this.stamp[12] != 0) {
  531.          var1 |= 4096;
  532.       }
  533.  
  534.       if (this.stamp[13] != 0) {
  535.          var1 |= 8192;
  536.       }
  537.  
  538.       if (this.stamp[14] != 0) {
  539.          var1 |= 16384;
  540.       }
  541.  
  542.       if (this.stamp[15] >= 2) {
  543.          var1 |= 32768;
  544.       }
  545.  
  546.       if (this.stamp[16] >= 2) {
  547.          var1 |= 65536;
  548.       }
  549.  
  550.       return var1;
  551.    }
  552.  
  553.    private static final int aggregateStamp(int var0, int var1) {
  554.       if (var0 != 0 && var1 != 0) {
  555.          return var0 > var1 ? var0 : var1;
  556.       } else {
  557.          return 0;
  558.       }
  559.    }
  560.  
  561.    public boolean equals(Object var1) {
  562.       if (this == var1) {
  563.          return true;
  564.       } else {
  565.          try {
  566.             Calendar var2 = (Calendar)var1;
  567.             return this.compareTo(getMillisOf(var2)) == 0 && this.lenient == var2.lenient && this.firstDayOfWeek == var2.firstDayOfWeek && this.minimalDaysInFirstWeek == var2.minimalDaysInFirstWeek && this.zone.equals(var2.zone);
  568.          } catch (Exception var3) {
  569.             return false;
  570.          }
  571.       }
  572.    }
  573.  
  574.    public int hashCode() {
  575.       int var1 = (this.lenient ? 1 : 0) | this.firstDayOfWeek << 1 | this.minimalDaysInFirstWeek << 4 | this.zone.hashCode() << 7;
  576.       long var2 = getMillisOf(this);
  577.       return (int)var2 ^ (int)(var2 >> 32) ^ var1;
  578.    }
  579.  
  580.    public boolean before(Object var1) {
  581.       return var1 instanceof Calendar && this.compareTo((Calendar)var1) < 0;
  582.    }
  583.  
  584.    public boolean after(Object var1) {
  585.       return var1 instanceof Calendar && this.compareTo((Calendar)var1) > 0;
  586.    }
  587.  
  588.    public int compareTo(Calendar var1) {
  589.       return this.compareTo(getMillisOf(var1));
  590.    }
  591.  
  592.    public abstract void add(int var1, int var2);
  593.  
  594.    public abstract void roll(int var1, boolean var2);
  595.  
  596.    public void roll(int var1, int var2) {
  597.       while(var2 > 0) {
  598.          this.roll(var1, true);
  599.          --var2;
  600.       }
  601.  
  602.       while(var2 < 0) {
  603.          this.roll(var1, false);
  604.          ++var2;
  605.       }
  606.  
  607.    }
  608.  
  609.    public void setTimeZone(TimeZone var1) {
  610.       this.zone = var1;
  611.       this.sharedZone = false;
  612.       this.areAllFieldsSet = this.areFieldsSet = false;
  613.    }
  614.  
  615.    public TimeZone getTimeZone() {
  616.       if (this.sharedZone) {
  617.          this.zone = (TimeZone)this.zone.clone();
  618.          this.sharedZone = false;
  619.       }
  620.  
  621.       return this.zone;
  622.    }
  623.  
  624.    TimeZone getZone() {
  625.       return this.zone;
  626.    }
  627.  
  628.    void setZoneShared(boolean var1) {
  629.       this.sharedZone = var1;
  630.    }
  631.  
  632.    public void setLenient(boolean var1) {
  633.       this.lenient = var1;
  634.    }
  635.  
  636.    public boolean isLenient() {
  637.       return this.lenient;
  638.    }
  639.  
  640.    public void setFirstDayOfWeek(int var1) {
  641.       if (this.firstDayOfWeek != var1) {
  642.          this.firstDayOfWeek = var1;
  643.          this.invalidateWeekFields();
  644.       }
  645.    }
  646.  
  647.    public int getFirstDayOfWeek() {
  648.       return this.firstDayOfWeek;
  649.    }
  650.  
  651.    public void setMinimalDaysInFirstWeek(int var1) {
  652.       if (this.minimalDaysInFirstWeek != var1) {
  653.          this.minimalDaysInFirstWeek = var1;
  654.          this.invalidateWeekFields();
  655.       }
  656.    }
  657.  
  658.    public int getMinimalDaysInFirstWeek() {
  659.       return this.minimalDaysInFirstWeek;
  660.    }
  661.  
  662.    public abstract int getMinimum(int var1);
  663.  
  664.    public abstract int getMaximum(int var1);
  665.  
  666.    public abstract int getGreatestMinimum(int var1);
  667.  
  668.    public abstract int getLeastMaximum(int var1);
  669.  
  670.    public int getActualMinimum(int var1) {
  671.       int var2 = this.getGreatestMinimum(var1);
  672.       int var3 = this.getMinimum(var1);
  673.       if (var2 == var3) {
  674.          return var2;
  675.       } else {
  676.          Calendar var4 = (Calendar)this.clone();
  677.          var4.setLenient(true);
  678.          int var5 = var2;
  679.  
  680.          do {
  681.             var4.set(var1, var2);
  682.             if (var4.get(var1) != var2) {
  683.                break;
  684.             }
  685.  
  686.             var5 = var2--;
  687.          } while(var2 >= var3);
  688.  
  689.          return var5;
  690.       }
  691.    }
  692.  
  693.    public int getActualMaximum(int var1) {
  694.       int var2 = this.getLeastMaximum(var1);
  695.       int var3 = this.getMaximum(var1);
  696.       if (var2 == var3) {
  697.          return var2;
  698.       } else {
  699.          Calendar var4 = (Calendar)this.clone();
  700.          var4.setLenient(true);
  701.          if (var1 == 3 || var1 == 4) {
  702.             var4.set(7, this.firstDayOfWeek);
  703.          }
  704.  
  705.          int var5 = var2;
  706.  
  707.          do {
  708.             var4.set(var1, var2);
  709.             if (var4.get(var1) != var2) {
  710.                break;
  711.             }
  712.  
  713.             var5 = var2++;
  714.          } while(var2 <= var3);
  715.  
  716.          return var5;
  717.       }
  718.    }
  719.  
  720.    public Object clone() {
  721.       try {
  722.          Calendar var1 = (Calendar)super.clone();
  723.          var1.fields = new int[17];
  724.          var1.isSet = new boolean[17];
  725.          var1.stamp = new int[17];
  726.  
  727.          for(int var2 = 0; var2 < 17; ++var2) {
  728.             var1.fields[var2] = this.fields[var2];
  729.             var1.stamp[var2] = this.stamp[var2];
  730.             var1.isSet[var2] = this.isSet[var2];
  731.          }
  732.  
  733.          var1.zone = (TimeZone)this.zone.clone();
  734.          return var1;
  735.       } catch (CloneNotSupportedException var3) {
  736.          throw new InternalError();
  737.       }
  738.    }
  739.  
  740.    static final String getFieldName(int var0) {
  741.       return FIELD_NAME[var0];
  742.    }
  743.  
  744.    public String toString() {
  745.       StringBuilder var1 = new StringBuilder(800);
  746.       var1.append(this.getClass().getName()).append('[');
  747.       appendValue(var1, "time", this.isTimeSet, this.time);
  748.       var1.append(",areFieldsSet=").append(this.areFieldsSet);
  749.       var1.append(",areAllFieldsSet=").append(this.areAllFieldsSet);
  750.       var1.append(",lenient=").append(this.lenient);
  751.       var1.append(",zone=").append(this.zone);
  752.       appendValue(var1, ",firstDayOfWeek", true, (long)this.firstDayOfWeek);
  753.       appendValue(var1, ",minimalDaysInFirstWeek", true, (long)this.minimalDaysInFirstWeek);
  754.  
  755.       for(int var2 = 0; var2 < 17; ++var2) {
  756.          var1.append(',');
  757.          appendValue(var1, FIELD_NAME[var2], this.isSet(var2), (long)this.fields[var2]);
  758.       }
  759.  
  760.       var1.append(']');
  761.       return var1.toString();
  762.    }
  763.  
  764.    private static final void appendValue(StringBuilder var0, String var1, boolean var2, long var3) {
  765.       var0.append(var1).append('=');
  766.       if (var2) {
  767.          var0.append(var3);
  768.       } else {
  769.          var0.append('?');
  770.       }
  771.  
  772.    }
  773.  
  774.    private void setWeekCountData(Locale var1) {
  775.       int[] var2 = (int[])cachedLocaleData.get(var1);
  776.       if (var2 == null) {
  777.          ResourceBundle var3 = LocaleData.getCalendarData(var1);
  778.          var2 = new int[]{Integer.parseInt(var3.getString("firstDayOfWeek")), Integer.parseInt(var3.getString("minimalDaysInFirstWeek"))};
  779.          cachedLocaleData.put(var1, var2);
  780.       }
  781.  
  782.       this.firstDayOfWeek = var2[0];
  783.       this.minimalDaysInFirstWeek = var2[1];
  784.    }
  785.  
  786.    private void updateTime() {
  787.       this.computeTime();
  788.       this.isTimeSet = true;
  789.    }
  790.  
  791.    private int compareTo(long var1) {
  792.       long var3 = getMillisOf(this);
  793.       return var3 > var1 ? 1 : (var3 == var1 ? 0 : -1);
  794.    }
  795.  
  796.    private static final long getMillisOf(Calendar var0) {
  797.       if (var0.isTimeSet) {
  798.          return var0.time;
  799.       } else {
  800.          Calendar var1 = (Calendar)var0.clone();
  801.          var1.setLenient(true);
  802.          return var1.getTimeInMillis();
  803.       }
  804.    }
  805.  
  806.    private final void adjustStamp() {
  807.       int var1 = 2;
  808.       int var2 = 2;
  809.  
  810.       int var3;
  811.       do {
  812.          var3 = Integer.MAX_VALUE;
  813.  
  814.          for(int var4 = 0; var4 < this.stamp.length; ++var4) {
  815.             int var5 = this.stamp[var4];
  816.             if (var5 >= var2 && var3 > var5) {
  817.                var3 = var5;
  818.             }
  819.  
  820.             if (var1 < var5) {
  821.                var1 = var5;
  822.             }
  823.          }
  824.  
  825.          if (var1 != var3 && var3 == Integer.MAX_VALUE) {
  826.             break;
  827.          }
  828.  
  829.          for(int var6 = 0; var6 < this.stamp.length; ++var6) {
  830.             if (this.stamp[var6] == var3) {
  831.                this.stamp[var6] = var2;
  832.             }
  833.          }
  834.  
  835.          ++var2;
  836.       } while(var3 != var1);
  837.  
  838.       this.nextStamp = var2;
  839.    }
  840.  
  841.    private void invalidateWeekFields() {
  842.       if (this.stamp[4] == 1 || this.stamp[3] == 1) {
  843.          Calendar var1 = (Calendar)this.clone();
  844.          var1.setLenient(true);
  845.          var1.clear(4);
  846.          var1.clear(3);
  847.          if (this.stamp[4] == 1) {
  848.             int var2 = var1.get(4);
  849.             if (this.fields[4] != var2) {
  850.                this.fields[4] = var2;
  851.             }
  852.          }
  853.  
  854.          if (this.stamp[3] == 1) {
  855.             int var3 = var1.get(3);
  856.             if (this.fields[3] != var3) {
  857.                this.fields[3] = var3;
  858.             }
  859.          }
  860.  
  861.       }
  862.    }
  863.  
  864.    private void writeObject(ObjectOutputStream var1) throws IOException {
  865.       if (!this.isTimeSet) {
  866.          try {
  867.             this.updateTime();
  868.          } catch (IllegalArgumentException var4) {
  869.          }
  870.       }
  871.  
  872.       TimeZone var2 = null;
  873.       if (this.zone instanceof ZoneInfo) {
  874.          SimpleTimeZone var3 = ((ZoneInfo)this.zone).getLastRuleInstance();
  875.          if (var3 == null) {
  876.             var3 = new SimpleTimeZone(this.zone.getRawOffset(), this.zone.getID());
  877.          }
  878.  
  879.          var2 = this.zone;
  880.          this.zone = var3;
  881.       }
  882.  
  883.       var1.defaultWriteObject();
  884.       var1.writeObject(var2);
  885.       if (var2 != null) {
  886.          this.zone = var2;
  887.       }
  888.  
  889.    }
  890.  
  891.    private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
  892.       ObjectInputStream var2 = var1;
  893.       var1.defaultReadObject();
  894.       this.stamp = new int[17];
  895.       if (this.serialVersionOnStream >= 2) {
  896.          this.isTimeSet = true;
  897.          if (this.fields == null) {
  898.             this.fields = new int[17];
  899.          }
  900.  
  901.          if (this.isSet == null) {
  902.             this.isSet = new boolean[17];
  903.          }
  904.       } else if (this.serialVersionOnStream >= 0) {
  905.          for(int var3 = 0; var3 < 17; ++var3) {
  906.             this.stamp[var3] = this.isSet[var3] ? 1 : 0;
  907.          }
  908.       }
  909.  
  910.       this.serialVersionOnStream = 1;
  911.  
  912.       try {
  913.          ZoneInfo var6 = (ZoneInfo)AccessController.doPrivileged(new 1(this, var2));
  914.          if (var6 != null) {
  915.             this.zone = var6;
  916.          }
  917.       } catch (Exception var5) {
  918.       }
  919.  
  920.       if (this.zone instanceof SimpleTimeZone) {
  921.          String var7 = this.zone.getID();
  922.          TimeZone var4 = TimeZone.getTimeZone(var7);
  923.          if (var4 != null && var4.hasSameRules(this.zone) && var4.getID().equals(var7)) {
  924.             this.zone = var4;
  925.          }
  926.       }
  927.  
  928.    }
  929. }
  930.